package com.smart.community.region.entity;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.smart.community.commons.base.BaseEntity;
import com.smart.community.commons.enums.SystemStatusEnum;
import lombok.Data;
import lombok.EqualsAndHashCode;

/**
 * 物业建筑基础分类实体类
 * 
 * @author Wu.Liang
 * @since 2025-01-30
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("sc_building_type_category")
public class BuildingTypeCategory extends BaseEntity {
    /**
	 * @author Wu.Liang
	 * @date 2025年8月19日
	 */
	private static final long serialVersionUID = 1619996644416443891L;

	/**
     * 父分类ID
     */
    @TableField("parent_id")
    private Long parentId;

    /**
     * 分类名称
     */
    @TableField("category_name")
    private String categoryName;

    /**
     * 分类编码
     */
    @TableField("category_code")
    private String categoryCode;

    /**
     * 分类类型：DIVISION-划分方式，TYPE-具体类型
     */
    @TableField("category_type")
    private String categoryType;

    /**
     * 划分方式：PURPOSE-用途，STRUCTURE-结构，HEIGHT-高度，PROPERTY-产权，LAYOUT-布局，STYLE-风格
     */
    @TableField("division_type")
    private String divisionType;

    /**
     * 描述
     */
    @TableField("description")
    private String description;

    /**
     * 排序
     */
    @TableField("sort_order")
    private Integer sortOrder;

    /**
     * 状态：0-禁用，1-启用
     */
    @TableField("status")
    private Integer status;

    /**
     * 检查是否为顶级分类
     */
    @JsonIgnore
    public boolean isTopLevel() {
        return parentId == null || parentId == 0L;
    }

    /**
     * 检查是否为划分方式类型
     */
    @JsonIgnore
    public boolean isDivisionType() {
        return "DIVISION".equals(categoryType);
    }

    /**
     * 检查是否为具体类型
     */
    @JsonIgnore
    public boolean isSpecificType() {
        return "TYPE".equals(categoryType);
    }

    /**
     * 检查是否启用
     */
    @JsonIgnore
    public boolean isEnabled() {
        return SystemStatusEnum.ENABLED.getCode().equals(status);
    }
}
